package com.max.core.shiro.security;

import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.codec.Hex;
import org.apache.shiro.crypto.hash.SimpleHash;

import com.max.utils.LoggerUtils;

/**
 * 密码匹配器
 * 
 * @ClassName CustomCredentialsMatcher
 * @Description
 * @author 陈新建
 * @date 2018年4月24日 下午7:11:43
 */
public class CustomCredentialsMatcher extends HashedCredentialsMatcher {

	@Override
	public boolean doCredentialsMatch(AuthenticationToken tuthcToken, AuthenticationInfo info) {
		// 登录用户输入的用户名与密码
		UsernamePasswordToken token = (UsernamePasswordToken) tuthcToken;
		// 从数据库中获取的用户信息中的密码
		Object credentials = getCredentials(info);
		String pwd = String.valueOf(token.getPassword());
		// 把用户密码进行加密
		pwd = CustomCredentialsMatcher.pwdToMD5(pwd);
		LoggerUtils.error(this.getClass(), pwd);
		// 两个密码比较，相同返回true,不相同返回false
		return equals(Hex.decode(pwd), credentials);
		// return super.doCredentialsMatch(token, info);
	}

	/**
	 * 对明码密码进行加密
	 * 
	 * @param pwd
	 *            密码
	 * @return 加密后的密码
	 */
	private static String pwdToMD5(String pwd) {
		// 加盐，即加一个字符，为了不易破解
		String salt = "com.max";
		// 散列次数
		int hashIterations = 3;
		return pwd = new SimpleHash("MD5", pwd, salt, hashIterations).toString();
	}
}
